<?php
/*
 * @package    RMFramework
 * @subpackage TecladoVirtual.php
 * @author Ricardo de Souza Maia (rsmaia@gmail.com)
 * @copyright  Copyright (c) 2006 Ricardo de Souza Maia
 * @license    http://www.gnu.org/copyleft/gpl.html
 * 
 * Criado em: 24/05/2006
 *
 * http://www.insphpired.com
 *
 */
 
 /*
 TODO:
 Método para criar o javascript no cliente!
 
 Implementar método para controle de contraste
 
 Implementar método para "tradução" de "Teclas_Pressionadas".
 */
class TecladoVirtual {
	
	private $ArrayImagens, $ArrayImagensEmbaralhadas, $ContadorImagens=0;
	private $senhaTemporaria;
        
	public function exibeTeclado($nomeImagem) {
              
               if(strlen($nomeImagem)>0 && $nomeImagem != "undefined"){
                    $this->armazenaTecla($nomeImagem);
               }

		$this->ArrayImagensEmbaralhadas = $_SESSION['ArrayImagens'];
		
		shuffle($this->ArrayImagensEmbaralhadas);

		$teclado = "";
		
		foreach ($this->ArrayImagensEmbaralhadas as $nome_imagem) {

			$teclado .= "
                <img onmouseup=\"j4ab();ofd3m(this.id);\"
                name=\"tecla\"
                onmouseover=\"mn8i();\"
                onmouseout=\"qt2w();\"
                style=\"margin:1px;padding:1px;cursor:pointer;\"
                border=\"1\" 
                id=\"". $nome_imagem ."\"
                src=\"" . $nome_imagem . "\">";
			$this->ContadorImagens++;
			$this->ContadorImagens == 5 ? $teclado.="<br>": $teclado.="";

		}
		
		print $teclado;
				
	}

	public function excluiImagens() {
            try{
                    foreach ($_SESSION['ArrayImagens'] as $nome_imagem) {
                            unlink($nome_imagem);
                    }
               return true;
            } 
            
            catch  (Exception $e){
                return false;
            }      
	}


	public function criaTeclado(){
	
			for ($x = 0; $x < 10; $x++) {
				$this->ArrayImagens[] = $this->criaImagens(md5(rand()),$x);
			}
			$_SESSION['ArrayImagens'] = $this->ArrayImagens; 
	}


	private function criaImagens($nome,$texto) {

		$img = imagecreatetruecolor(22, 22);
		$background = imagecolorallocate($img, 245, 245, 245);
		//$cor_fonte = imagecolorallocate($img, 0, 90, 255);
                $cor_fonte = imagecolorallocate($img, 65, 100, 175);
		imagefilledrectangle($img, 0, 0, 22, 22, $background);
                

		imagettftext($img, 15 , // tamanho do caracter.
		0, // angulo.
		7, // posição no eixo X.
		16, // posição no eixo Y.
		$cor_fonte, //cor da fonte.
		"./fonte.ttf", // tipo de fonte 
		$texto // texto que será impresso na imagem
		);
		
		ImagePNG($img, $nome . ".png");
		
		return $nome . ".png";
		
	}
	
	private function armazenaTecla($valor_tecla){
		$_SESSION['teclas_pressionadas'][] = $valor_tecla;
	}
        
        public function limpar(){
                $_SESSION['teclas_pressionadas']=null;
        }
        
        public function escreveInicializa(){
        
            if(!isset($_SESSION['teclado_criado']) && $_SESSION['teclado_criado']!=TRUE){
                print "hzeb1();ofd3m();";
                $_SESSION['teclado_criado']=TRUE;
            }else{
                print "ofd3m();";
            }        
            
        }
        
        public function escreveCabecalho(){
        
        $css = file_get_contents("teclado_virtual.css");
        $js = file_get_contents("teclado_virtual.js");
                                
        $saida = "<style>{$css}</style><script>{$js}</script>";
            print $saida;
        }
        
        public function recuperaSenha(){
            $teclas_pressionadas = $_SESSION['teclas_pressionadas'];
            $array_teclas = $_SESSION['ArrayImagens'];
                        
                foreach( $teclas_pressionadas as $valor_tecla_pressionada){
                             
                $this->senhaTemporaria.= array_search($valor_tecla_pressionada,$array_teclas);
                 
            }
            $this->limpar();
            return $this->senhaTemporaria." MD5: ".md5($this->senhaTemporaria);;
                      
        }
	
}
?>
